0x60806040527fb1073742015cbcf5a3a4d9d1ae33ecf619439710b89475f92e2abd2117e90f90600e55348015610033575f5ffd5b5061003c610041565b6100fd565b5f54610100900460ff16156100ac5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146100fb575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6127d08061010a5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80630b800f481461004e5780631ea7176114610063578063c4cc298614610079578063c852850c1461009a575b5f5ffd5b61006161005c366004611415565b6100c5565b005b600a546040519081526020015b60405180910390f35b61008c6100873660046114f4565b6103a1565b604051610070929190611729565b6100ad6100a83660046119ed565b610579565b6040516001600160a01b039091168152602001610070565b5f54610100900460ff16158080156100e357505f54600160ff909116105b806100fc5750303b1580156100fc57505f5460ff166001145b6101645760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610185575f805461ff0019166101001790555b8c5f60026101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508a60025f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508960035f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508860045f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555087600d5f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508660055f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508560065f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508460075f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508360085f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508260095f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600c5f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508015610392575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050505050565b6060805f6103af8585611bf1565b6001600160401b038111156103c6576103c661179e565b6040519080825280602002602001820160405280156103ef578160200160208202803683370190505b5090505f6103fd8686611bf1565b6001600160401b038111156104145761041461179e565b60405190808252806020026020018201604052801561044d57816020015b61043a611315565b8152602001906001900390816104325790505b509050855b8581101561056d57600a818154811061046d5761046d611c16565b5f918252602090912001546001600160a01b03168361048c8984611bf1565b8151811061049c5761049c611c16565b60200260200101906001600160a01b031690816001600160a01b031681525050600a81815481106104cf576104cf611c16565b5f918252602082200154604080516329c07d7160e11b815290516001600160a01b0390921692635380fae2926004808401938290030181865afa158015610518573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261053f9190810190611d3e565b8261054a8984611bf1565b8151811061055a5761055a611c16565b6020908102919091010152600101610452565b50909590945092505050565b6101608501515f906001600160a01b0316156108b5576101608601516040516309ab24eb60e41b81523360048201526001600160a01b0390911690639ab24eb090602401602060405180830381865afa9250505080156105f6575060408051601f3d908101601f191682019092526105f391810190611ef4565b60015b6108ab573d808015610623576040519150601f19603f3d011682016040523d82523d5f602084013e610628565b606091505b5060408051600481526024810182526020810180516001600160e01b031663900cf0cf60e01b179052610160890151915190915f916001600160a01b0390911690610674908490611f0b565b5f604051808303815f865af19150503d805f81146106ad576040519150601f19603f3d011682016040523d82523d5f602084013e6106b2565b606091505b505090505f81151560011515036107ad5760055f9054906101000a90046001600160a01b03166001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610713573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107379190611f21565b6101608b0151604051635b2d22a360e01b81526001600160a01b039182166004820152911690635b2d22a3906024016020604051808303815f875af1158015610782573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a69190611f21565b9050610893565b60055f9054906101000a90046001600160a01b03166001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107fd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108219190611f21565b6101608b01516040516313e4857160e21b81526001600160a01b039182166004820152911690634f9215c4906024016020604051808303815f875af115801561086c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108909190611f21565b90505b6001600160a01b03166101608a0152506108ad915050565b505b600160e08701525b5f5f60029054906101000a90046001600160a01b03166040516108d7906113c3565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff08015801561090e573d5f5f3e3d5ffd5b506007546040519192505f916001600160a01b039091169061092f906113c3565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff080158015610966573d5f5f3e3d5ffd5b5090505f600c5f9054906101000a90046001600160a01b03166001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109de9190611f21565b60015460405163c632753560e01b81526001600160a01b03918216600482015291169063c6327535906024016020604051808303815f875af1158015610a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4a9190611f21565b90505f600c5f9054906101000a90046001600160a01b03166001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac19190611f21565b604051631de078f760e01b81526001600160a01b038681166004830152858116602483015284811660448301529190911690631de078f7906064016020604051808303815f875af1158015610b18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3c9190611f21565b60408051600481526024810182526020810180516359e4d22360e11b6001600160e01b0390911617905281516001808252818401909352929350915f9181602001602082028036833701905050905085815f81518110610b9e57610b9e611c16565b60200260200101906001600160a01b031690816001600160a01b0316815250505f7fb63e800d34f56a9238e5b86a8547a23865164bec371bede606e899182da118bf826001868673f48f2b2d2a534e402487b3ee7c18c33aec0fe5e45f5f5f604051602401610c14989796959493929190611f43565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600254600354600e549351631688f0b960e01b81529294505f936001600160a01b0392831693631688f0b993610c829316918791600401611fba565b6020604051808303815f875af1158015610c9e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc29190611f21565b9050808e60c001906001600160a01b031690816001600160a01b031681525050600a86908060018154018082558091505060019003905f5260205f20015f9091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055505f6001600160a01b03168e61016001516001600160a01b031603610d57576001600160a01b0386166101608f01525b858e61018001906001600160a01b031690816001600160a01b031681525050878e6101a001906001600160a01b031690816001600160a01b031681525050610da0888f8f610edc565b6101208e01515115610db55760016101008f01525b610dc2868f8e8e8e610f63565b5f866001600160a01b0316635380fae26040518163ffffffff1660e01b81526004015f60405180830381865afa158015610dfe573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e259190810190611d3e565b6101a08101519091506001600160a01b0316610e745760405162461bcd60e51b815260206004820152600e60248201526d19985a5b08199d5b99081a5b9a5d60921b604482015260640161015b565b610e7f82898b610fee565b6101608101516101c08201516040517f4645ad707900811d21db3d87802a55a553ff6f7c0287e9f77ffd57ab66561a9092610ec1928b928e9288928f92611fed565b60405180910390a150949d9c50505050505050505050505050565b826001600160a01b03166336dfa8d9836101600151846101c00151845f015185602001518660400151876060015188608001516040518863ffffffff1660e01b8152600401610f31979695949392919061203c565b5f604051808303815f87803b158015610f48575f5ffd5b505af1158015610f5a573d5f5f3e3d5ffd5b50505050505050565b6101c08401516101e0850151600654600854600954604051635d58ac7160e01b81526001600160a01b03808c1696635d58ac7196610fba96919590948d9492841693918216929116908c908c908c90600401612089565b5f604051808303815f87803b158015610fd1575f5ffd5b505af1158015610fe3573d5f5f3e3d5ffd5b505050505050505050565b604080513060208201526001600160a01b03851691810182905260608101919091525f90819060800160405160208183030381529060405290505f7fa4f9edbf7e35ea63532f3a02ca9c1a10f268900b643101f6e0061d05d304f66e8260405160240161105b9190612110565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050846001600160a01b0316816040516110a89190611f0b565b5f604051808303815f865af19150503d805f81146110e1576040519150601f19603f3d011682016040523d82523d5f602084013e6110e6565b606091505b50909350506001831515146111345760405162461bcd60e51b815260206004820152601460248201527306661696c20726f6c6573206d6f642073657475760641b604482015260640161015b565b600d54604080516001600160a01b0392831660248083019190915282518083039091018152604490910182526020810180516001600160e01b0316638b95eccd60e01b1790529051909187169061118c908390611f0b565b5f604051808303815f865af19150503d805f81146111c5576040519150601f19603f3d011682016040523d82523d5f602084013e6111ca565b606091505b50909450506001841515146112215760405162461bcd60e51b815260206004820152601b60248201527f6661696c20726f6c6573206d6f64207365744d756c746973656e640000000000604482015260640161015b565b604080516001600160a01b0387811660248084019190915283518084039091018152604490920183526020820180516001600160e01b031663f2fde38b60e01b17905291519091881690611276908390611f0b565b5f604051808303815f865af19150503d805f81146112af576040519150601f19603f3d011682016040523d82523d5f602084013e6112b4565b606091505b509095505060018515151461130b5760405162461bcd60e51b815260206004820181905260248201527f6661696c20726f6c6573206d6f64207472616e736665724f776e657273686970604482015260640161015b565b5050505050505050565b6040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f151581526020015f1515815260200160608152602001606081526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b0316815260200160608152602001606081526020016113be6113d0565b905290565b6106788061212383390190565b60405180608001604052806004906020820280368337509192915050565b6001600160a01b0381168114611402575f5ffd5b50565b8035611410816113ee565b919050565b5f5f5f5f5f5f5f5f5f5f5f5f6101808d8f031215611431575f5ffd5b8c3561143c816113ee565b9b5060208d013561144c816113ee565b9a5060408d013561145c816113ee565b995060608d013561146c816113ee565b985060808d013561147c816113ee565b975061148a60a08e01611405565b965061149860c08e01611405565b95506114a660e08e01611405565b94506114b56101008e01611405565b93506114c46101208e01611405565b92506114d36101408e01611405565b91506114e26101608e01611405565b90509295989b509295989b509295989b565b5f5f60408385031215611505575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b8281101561154d5781516001600160a01b0316865260209586019590910190600101611526565b5093949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b805f5b60048110156115b05781516001600160a01b0316845260209384019390910190600101611588565b50505050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525f60a08201516115fd60a08501826001600160a01b03169052565b5060c082015161161860c08501826001600160a01b03169052565b5060e082015161162c60e085018215159052565b5061010082015161164261010085018215159052565b50610120820151610280610120850152611660610280850182611514565b905061014083015184820361014086015261167b8282611514565b91505061016083015161169a6101608601826001600160a01b03169052565b506101808301516116b76101808601826001600160a01b03169052565b506101a08301516116d46101a08601826001600160a01b03169052565b506101c08301518482036101c08601526116ee8282611557565b9150506101e08301518482036101e086015261170a8282611557565b915050610200830151611721610200860182611585565b509392505050565b604081525f61173b6040830185611514565b828103602084015280845180835260208301915060208160051b840101602087015f5b8381101561179057601f1986840301855261177a8383516115b6565b602095860195909350919091019060010161175e565b509098975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b60405161022081016001600160401b03811182821017156117d5576117d561179e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156118035761180361179e565b604052919050565b8015158114611402575f5ffd5b80356114108161180b565b5f6001600160401b0382111561183b5761183b61179e565b5060051b60200190565b5f82601f830112611854575f5ffd5b813561186761186282611823565b6117db565b8082825260208201915060208360051b860101925085831115611888575f5ffd5b602085015b838110156118ae5780356118a0816113ee565b83526020928301920161188d565b5095945050505050565b5f6001600160401b038211156118d0576118d061179e565b50601f01601f191660200190565b5f82601f8301126118ed575f5ffd5b81356118fb611862826118b8565b81815284602083860101111561190f575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f82601f83011261193a575f5ffd5b61194460806117db565b806080840185811115611955575f5ffd5b845b8181101561197857803561196a816113ee565b845260209384019301611957565b509095945050505050565b5f60a08284031215611993575f5ffd5b60405160a081016001600160401b03811182821017156119b5576119b561179e565b604090815283358252602080850135908301528381013590820152606080840135908201526080928301359281019290925250919050565b5f5f5f5f5f6101208688031215611a02575f5ffd5b85356001600160401b03811115611a17575f5ffd5b86016102808189031215611a29575f5ffd5b611a316117b2565b8135815260208083013590820152604080830135908201526060808301359082015260808083013590820152611a6960a08301611405565b60a0820152611a7a60c08301611405565b60c0820152611a8b60e08301611818565b60e0820152611a9d6101008301611818565b6101008201526101208201356001600160401b03811115611abc575f5ffd5b611ac88a828501611845565b610120830152506101408201356001600160401b03811115611ae8575f5ffd5b611af48a828501611845565b61014083015250611b086101608301611405565b610160820152611b1b6101808301611405565b610180820152611b2e6101a08301611405565b6101a08201526101c08201356001600160401b03811115611b4d575f5ffd5b611b598a8285016118de565b6101c0830152506101e08201356001600160401b03811115611b79575f5ffd5b611b858a8285016118de565b6101e083015250611b9a89610200840161192b565b6102008201529550611bb190508760208801611983565b935060c08601356001600160401b03811115611bcb575f5ffd5b611bd7888289016118de565b9598949750949560e0810135955061010001359392505050565b81810381811115611c1057634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b8051611410816113ee565b80516114108161180b565b5f82601f830112611c4f575f5ffd5b8151611c5d61186282611823565b8082825260208201915060208360051b860101925085831115611c7e575f5ffd5b602085015b838110156118ae578051611c96816113ee565b835260209283019201611c83565b5f82601f830112611cb3575f5ffd5b8151611cc1611862826118b8565b818152846020838601011115611cd5575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112611d00575f5ffd5b611d0a60806117db565b806080840185811115611d1b575f5ffd5b845b81811015611978578051611d30816113ee565b845260209384019301611d1d565b5f60208284031215611d4e575f5ffd5b81516001600160401b03811115611d63575f5ffd5b82016102808185031215611d75575f5ffd5b611d7d6117b2565b8151815260208083015190820152604080830151908201526060808301519082015260808083015190820152611db560a08301611c2a565b60a0820152611dc660c08301611c2a565b60c0820152611dd760e08301611c35565b60e0820152611de96101008301611c35565b6101008201526101208201516001600160401b03811115611e08575f5ffd5b611e1486828501611c40565b610120830152506101408201516001600160401b03811115611e34575f5ffd5b611e4086828501611c40565b61014083015250611e546101608301611c2a565b610160820152611e676101808301611c2a565b610180820152611e7a6101a08301611c2a565b6101a08201526101c08201516001600160401b03811115611e99575f5ffd5b611ea586828501611ca4565b6101c0830152506101e08201516001600160401b03811115611ec5575f5ffd5b611ed186828501611ca4565b6101e083015250611ee6856102008401611cf1565b610200820152949350505050565b5f60208284031215611f04575f5ffd5b5051919050565b5f82518060208501845e5f920191825250919050565b5f60208284031215611f31575f5ffd5b8151611f3c816113ee565b9392505050565b61010081525f611f5761010083018b611514565b60ff8a1660208401526001600160a01b03891660408401528281036060840152611f818189611557565b6001600160a01b03978816608085015295871660a0840152505060ff9290921660c083015290921660e090920191909152949350505050565b6001600160a01b03841681526060602082018190525f90611fdd90830185611557565b9050826040830152949350505050565b6001600160a01b0387811682528681166020830152858116604083015284811660608301528316608082015260c060a082018190525f9061203090830184611557565b98975050505050505050565b6001600160a01b038816815260e0602082018190525f9061205f90830189611557565b6040830197909752506060810194909452608084019290925260a083015260c09091015292915050565b61012081525f61209d61012083018c611557565b82810360208401526120af818c611557565b905082810360408401526120c3818b6115b6565b6001600160a01b038a811660608601528981166080860152881660a085015283810360c085015290506120f68187611557565b60e084019590955250506101000152979650505050505050565b602081525f611f3c602083018461155756fe6080604052604051610678380380610678833981016040819052610022916103ed565b61002d82825f610034565b5050610513565b61003d836100f1565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a25f8251118061007c5750805b156100ec576100ea836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906104af565b83610273565b505b505050565b6001600160a01b0381163b61015b5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101cd816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be91906104af565b6001600160a01b03163b151590565b6102325760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610152565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029883836040518060600160405280602781526020016106516027913961029f565b9392505050565b60605f5f856001600160a01b0316856040516102bb91906104c8565b5f60405180830381855af49150503d805f81146102f3576040519150601f19603f3d011682016040523d82523d5f602084013e6102f8565b606091505b50909250905061030a86838387610314565b9695505050505050565b606083156103825782515f0361037b576001600160a01b0385163b61037b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610152565b508161038c565b61038c8383610394565b949350505050565b8151156103a45781518083602001fd5b8060405162461bcd60e51b815260040161015291906104de565b80516001600160a01b03811681146103d4575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156103fe575f5ffd5b610407836103be565b60208401519092506001600160401b03811115610422575f5ffd5b8301601f81018513610432575f5ffd5b80516001600160401b0381111561044b5761044b6103d9565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610479576104796103d9565b604052818152828201602001871015610490575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f602082840312156104bf575f5ffd5b610298826103be565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610131806105205f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b60b3565b565b5f60527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015608c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019060ae919060d0565b905090565b365f5f375f5f365f845af43d5f5f3e80801560cc573d5ff35b3d5ffd5b5f6020828403121560df575f5ffd5b81516001600160a01b038116811460f4575f5ffd5b939250505056fea26469706673582212202b4416b77ca7f93c9e50da94c58479681cf968eedc3662b6b7724ff8629ffce664736f6c634300081c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208865b74be8d48c399b7d4f9382fddaaf413c55c0084774623ec6eccb15033dde64736f6c634300081c0033